package com.nkzy.test;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest
public class JwtText {
    /**
     * JWT令牌：
     * 有三部分构成：其中第二部分是载荷，可以存放多个信息
     * 可以用集合：
     * 1.list接口：Arraylist是list接口的实现类
     * 2.set接口
     * 3.map接口：HashMap是map接口的实现类
     *
     */
    //生成令牌的方法
    @Test
    public void testGenJwt(){
        Map<String,Object> claims=new HashMap<>();
        claims.put("id",1);
        claims.put("username","nkzyfff");
        //生成IWT
        String token= JWT.create()
                .withClaim("user",claims)//添加载荷
                .withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60*12))//添加令牌过期时间12小时
                .sign(Algorithm.HMAC256("nkzy"));//密钥
        System.out.println(token);

    }
    //有验证令牌的方法
    @Test
    public void testParseJwt(){
        String token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6Im5renlmZmYifSwiZXhwIjoxNzE0MDc1NDE4fQ.VUGgP-jpk8676iXcixkvnLkOYMe_Vcev9HnZVwtYPcE";
        JWTVerifier verifier=JWT.require(Algorithm.HMAC256("nkzy")).build();
        DecodedJWT decodedJWT=verifier.verify(token);
        Map<String, Claim> claims=decodedJWT.getClaims();
        System.out.println(claims);
    }
}


























